Możliwe jest definiowanie właściwości za pomocą wyrażeń matematycznych. W GUI, pola wyboru lub pola wejściowe, które są powiązane z właściwościami pokazują niebieską ikonę , gdy są aktywowane. Kliknięcie ikony lub wpisanie znaku równości = otwiera edytor wyrażeń dla danej właściwości. Jeśli pole wejściowe pokazuje przycisk ... zamiast ikony, edytor wyrażeń można otworzyć, klikając właściwość prawym przyciskiem myszy i wybierając Wyrażenie ... z menu podręcznego.
Wyrażenie FreeCAD jest wyrażeniem matematycznym zgodnym z notacją dla standardowych operatorów matematycznych, funkcji oraz predefiniowanych stałych opisanych poniżej. Dodatkowo, wyrażenie może odwoływać się do innych wyrażeń warunkowych, a także używać warunków. Liczby w wyrażeniu mogą mieć opcjonalnie dołączoną jednostkę.
W liczbach można używać przecinka ,
lub kropki dziesiętnej .
oddzielającej całe cyfry od części dziesiętnych.
Gdy używany jest przecinek, po nim musi następować co najmniej jedna cyfra.
Zatem wyrażenia 1.+2.
i 1,+2,
są nieprawidłowe, ale 1.0 + 2.0
i 1,0 + 2,0
są już poprawne.
Operatory i funkcje są świadome jednostek i wymagają poprawnych kombinacji jednostek, jeśli zostały podane. Na przykład, 2mm + 4mm
jest poprawnym wyrażeniem, podczas gdy 2mm + 4
. Dotyczy to również odwołań do właściwości obiektu, które mają jednostki, takie jak właściwości Długości. Tak więc Pad001.Length + 1
jest wyrażeniem nieprawidłowym, ponieważ dodaje czystą liczbę do właściwości z jednostkami długości, konieczne jest użycie Pad001.Length + 1mm
.
Niektóre błędy związane z jednostkami mogą wydawać się nieintuicyjne, z wyrażeniami albo są odrzucane, albo dają wyniki, które nie pasują do jednostek ustawianej właściwości. Oto kilka przykładów:
1/2mm
nie jest interpretowany jako pół milimetra, ale jako 1/(2mm)
, co daje: 0,5 mm^-1
.
sqrt(2)mm
nie jest prawidłowe, ponieważ wywołanie funkcji nie jest liczbą. Należy to wprowadzić jako sqrt(2) * 1mm
.
Wiele argumentów funkcji może być oddzielonych średnikiem ;
albo przecinkiem, po którym następuje spacja ,
. W tym drugim przypadku, po wprowadzeniu przecinek jest konwertowany na średnik. Gdy używany jest średnik, spacja nie jest wymagana.
Argumenty mogą zawierać odwołania do komórek w arkuszu kalkulacyjnym. Odwołanie do komórki składa się z wielkiej litery wiersza, po której następuje numer kolumny, na przykład A1
. Można też odwołać się do komórki, używając jej aliasu, na przykład Arkusz_kalkulacyjny.DługośćCzęści
.
Jak pokazano powyżej, można odwoływać się do obiektu poprzez jego DANENazwa. Ale można również użyć jego DANEEtykiety. W przypadku właściwości DANEEtykieta, musi ona być zamknięta w podwójnych symbolach <<
i >>
, na przykład <<Etykieta>>
.
Można odwołać się do dowolnej właściwości obiektu. Na przykład, aby odwołać się do wysokości bryły walca, możesz użyć właściwości Cylinder.Height
lub <<Etykieta_walca>>.Height
.
Więcej informacji na temat odwoływania się do obiektów znajdziesz w akapicie Odwołanie do danych CAD.
Obsługiwane są następujące stałe:
Nazwa stałej | Opis |
---|---|
e | Liczba Eulera |
pi | Pi |
Obsługiwane są następujące operatory:
Operator | Opis |
---|---|
+ | Dodawanie |
- | Odejmowanie |
* | Mnożenie |
/ | Dzielenie zmiennoprzecinkowe |
% | Modulo |
^ | Potęgowanie |
Obsługiwane są następujące funkcje matematyczne:
Funkcje trygonometryczne używają stopnia jako domyślnej jednostki. W przypadku miary radianowej, dodaj nazwę jednostki rad
za pierwszą wartością w wyrażeniu. Tak więc np. cos(45)
jest tym samym co cos(pi rad / 4)
. W wyrażeniach w stopniach można używać albo nazwę jednostki deg
albo symbol jednostki °
, np. 360deg - atan2(3; 4)
lub 360° - atan2(3; 4)
. Jeśli wyrażenie nie ma jednostek i musi być przeliczone na stopnie lub radiany dla zgodności, pomnóż je przez 1deg
, 1°
lub 1rad
, odpowiednio, np. (360 - X) * 1deg
; (360 - X) * 1°
; (0,5 + pi / 2) * 1rad
.
Funkcja | Opis | Zakres wprowadzanych wartości |
---|---|---|
acos(x)
|
Arc cosine | -1 <= x <= 1 |
asin(x)
|
Arc sine | -1 <= x <= 1 |
atan(x)
|
Arc tangent, zwraca wartość w zakresie > -90° do < 90° | cały |
atan2(y; x)
|
Arc tangent z "y/x" z uwzględnieniem kwadrantu, zwraca wartość w zakresie > -180° do <= 180° | cały, nieprawidłowe dane wejściowe x = y = 0, zwracają 0 |
cos(x)
|
Cosine | cały |
cosh(x)
|
Hyperbolic cosine | cały |
sin(x)
|
Sine | cały |
sinh(x)
|
Hyperbolic sine | cały |
tan(x)
|
Tangent | cały, z wyjątkiem x = n*90 przy n = nieparzysta liczba całkowita |
tanh(x)
|
Hyperbolic tangent | cały |
hypot(x; y)
|
dodatek Pitagorejski (hypotenuse). Np. hypot(4; 3) = 5. | x oraz y >= 0 |
cath(x; y)
|
Biorąc pod uwagę przeciwprostokątną i jeden bok, zwraca drugi bok trójkąta. Np. cath(5; 3) = 4. | x oraz x >= y >= 0 |
Funkcja | Opis | Zakres wprowadzanych wartości |
---|---|---|
exp(x)
|
Funkcja wykładnicza | cały |
log(x)
|
Logarytm naturalny | x > 0 |
log10(x)
|
Logarytm dziesiętny | x > 0 |
pow(x; y)
|
Potęgowanie | cały |
sqrt(x)
|
Pierwiastek kwadratowy | x >= 0 |
cbrt(x) dostępne w wersji 0.21
|
Pierwiastek sześcienny | cały |
Funkcja | Opis | Zakres wprowadzanych wartości |
---|---|---|
abs(x)
|
Wartość bezwzględna | cały |
ceil(x)
|
Funkcja sufitu, najmniejsza wartość całkowita większa lub równa x | cały |
floor(x)
|
Funkcja podłogi, największa wartość całkowita mniejsza lub równa x | cały |
mod(x; y)
|
Reszta po podzieleniu "'x'" przez "'y', znak wyniku to znak dywidendy. | cały, z wyjątkiem y = 0 |
round(x)
|
Zaokrąglanie do najbliższej liczby całkowitej | cały |
trunc(x)
|
Obcinanie do najbliższej liczby całkowitej w kierunku zera | cały |
Funkcje agregujące przyjmują jeden lub więcej argumentów.
Poszczególne argumenty funkcji agregujących mogą składać się z zakresów komórek. Zakres komórek jest wyrażony jako dwa odwołania do komórek oddzielone dwukropkiem :
, na przykład average(B1:B8)
lub sum(A1:A4; B1:B4)
.
Odwołania do komórek mogą również wykorzystywać aliasy komórek, na przykład average(StartTemp:KoniecTemp)
.
Obsługiwane są następujące funkcje agregacji:
Funkcja | Opis | Zakres wprowadzanych wartości |
---|---|---|
average(a; b; c; ...)
|
Średnia wartość argumentów, tak samo jak sum(a; b; c; ...) / count(a; b; c; ...) | cały |
count(a; b; c; ...)
|
Zlicz wartość argumentów, zwykle używane dla zakresów komórek | cały |
max(a; b; c; ...)
|
Maksimum wartość argumentów | cały |
min(a; b; c; ...)
|
Minimum wartość argumentów | cały |
stddev(a; b; c; ...)
|
Odchylenie standardowe wartości argumentów | cały |
sum(a; b; c; ...)
|
Suma wartości argumentów, typowo stosowane dla zakresów komórek | cały |
Łańcuchy są identyfikowane w wyrażeniach przez otoczenie ich podwójnymi daszkami otwierającymi/zamykającymi (podobnie jak etykiety).
W poniższym przykładzie "TEXT" jest rozpoznawany jako ciąg znaków : <<TEXT>>
.
Łańcuchy mogą być sumowane przy użyciu znaku +.
Na przykład <<Mój>> + <<TEKST>>
będzie złączone do "MójTEKST".
Wartości numeryczne można konwertować na ciągi za pomocą funkcji str
:
str(Box.Length.Value)
Formatowanie ciągów jest obsługiwane za pomocą (starego) sposobu środowiska Python w %-styl.
Wszystkie specyfikatory % są zdefiniowane w dokumentacji środowiska Python.
Na przykład, zakładając, że masz sześcian o domyślnej długości boków 10mm o nazwie "Sześcian" (domyślne nazewnictwo FreeCAD), następujące wyrażenie <<Długość sześcianu: %s>> % Box.Length
zostanie rozwinięte do "Długość sześcianu: 10.0mm".
Dla więcej niż jednego specyfikatora % należy użyć następującej składni: <<długość sześcianu to %s, a szerokość to %s>> % tuple(Box.Length; Box.Width)
. Można też użyć operacji łączenia: <<Długość sześcianu wynosi %s>> % Box.Length + << a szerokość wynosi %s>> % Box.Width
zostanie rozwinięte do "Długość sześcianu wynosi 10.0 mm a szerokość 10.0 mm".
Na forum dostępny jest przykładowy plik FreeCAD wykorzystujący formatowanie ciągów znaków.
W wyrażeniach można tworzyć następujące obiekty za pomocą następujących funkcji:
Typ | Funkcja | Opis |
---|---|---|
Tuple
|
tuple(a; b; ...)
|
Przykład: tuple(2; 1; 2)
|
List
|
list(a; b; ...)
|
Przykład: list(2; 1; 2)
|
Vector
|
vector(x; y; z)
|
Utwórz wektor używając trzech wartości jednostkowych bez jednostek lub Długości .
Przykład: |
create(<<vector>>; x; y; z)
| ||
Matrix
|
matrix( a11; a12; a13; a14; a21; a22; a23; a24; a31; a32; a33; a34; a41; a42; a43; a44 ) |
Create a 4x4 matrix in row-major order:
Można podać minimum 1 argument, np. Przykład: |
create(<<matrix>>; a11; a12; ...; a44)
| ||
Rotation
|
rotation(axis; angle)
|
Utwórz Rotation określając jego axis . (Vector ) i angle (Angle jednostkowy lub bezjednostkowy), lub trzy kąty Eulera. α , β , γ .
Przykład:
|
rotation(α; β; γ)
| ||
create(<<rotation>>; axis; angle)
| ||
create(<<rotation>>; α; β; γ)
| ||
Placement
|
placement(base; rotation)
|
Utwórz Placement z różnymi parametrami, w tym:
Przykład:
|
placement(base; rotation; center)
| ||
placement(base; axis; angle)
| ||
placement(matrix)
| ||
create(<<placement>>; ...)
|
Funkcje: dostępne w wersji 1.0.
Funkcja / Operator | Opis |
---|---|
v1 + v2
|
Dodaj dwa wektory. |
v1 - v2
|
Odejmowanie dwóch wektorów. |
v * s
|
Jednolite skalowanie wektora przez s .
|
vangle(v1; v2)
|
Kąt między dwoma wektorami w stopniach. |
vcross(v1; v2)
|
Iloczyn krzyżowy dwóch wektorów . |
v1 * v2
|
Iloczyn kropkowy dwóch wektorów . |
vdot(v1; v2)
| |
vlinedist(v1, v2, v3)
|
Odległość między wektorem v1 a linią przechodzącą przez v2 w kierunku v3 .
|
vlinesegdist(v1; v2; v3)
|
Odległość między wektorem v1 a najbliższym punktem na odcinku linii od v2 do v3 .
|
vlineproj(v1; v2; v3)
|
Rzutuj wektor v1 na linię przechodzącą przez v2 w kierunku v3 .
|
vnormalize(v)
|
Normalizuje wektor do wektora jednostkowego. |
vplanedist(v1)
|
Odległość między wektorem v1 a płaszczyzną zdefiniowaną przez punkt v2 i normalną v3 .
|
vplaneproj(v1)
|
Rzutuje wektor v1 na płaszczyznę zdefiniowaną przez punkt v2 i normalną v3 .
|
vscale(v; sx; sy; sz)
|
Niejednolite skalowanie wektora przez sx w kierunku X, sy w kierunku Y i sz w kierunku Z.
|
vscalex(v; sx)
| |
vscaley(v; sy)
| |
vscalez(v; sz)
|
Rotation
oraz Placement
może być reprezentowana przez Matrix
. Poniższe funkcje przyjmują Matrix
, Rotation
lub Placement
jako pierwszy parametr, oznaczony w poniższej tabeli przez m
. Typ zwracanego obiektu jest taki sam jak obiekt podany w pierwszym argumencie, z wyjątkiem użycia mtranslate
na Rotation
, w którym to przypadku zwrócony zostanie Placement
.
Funkcja | Opis |
---|---|
minvert(m)
|
Oblicz Inverse matrix. |
mrotate(m; rotation)
|
Rotate przez:
|
mrotate(m; axis; angle)
| |
mrotate(m; α; β; γ)
| |
mrotatex(m; angle)
|
Rotate wokół osi X. |
mrotatey(m; angle)
|
Rotate wokół osi Y. |
mrotatez(m; angle)
|
Rotate wokół osi Z. |
mtranslate(m; vector)
|
Przekształć za pomocą vector (Vector ) lub wartości X, Y, Z. Jeśli przekształcenie dotyczy Rotation , zwróconym obiektem jest Placement .
|
mtranslate(m; x; y; z)
| |
mscale(m; vector)
|
Skaluj za pomocą vector (Vector ) lub wartości X, Y, Z.
|
mscale(m; x; y; z)
|
Wyrażenia warunkowe mają postać condition ? resultTrue : resultFalse
. Warunek jest zdefiniowany jako wyrażenie, które oblicza się jako 0
(Fałsz
) lub niezerowe (Prawda
).
Zauważ, że aby użyć boolowskiej właściwości jako warunku, należy użyć następującej składni: VarSet.MyBool == 1 ? 10 mm : 15 mm
.
Zdefiniowane są następujące operatory relacyjne:
Operator | Opis |
---|---|
== | jest równy |
!= | nie jest równy |
> | większy niż |
< | mniejszy niż |
>= | większy lub równy |
<= | mniejszy lub równy |
Jednostki mogą być używane bezpośrednio w wyrażeniach. Parser łączy je z poprzedzającą wartością. Tak więc wartość 2mm
lub 2 mm
jest zapisana poprawne, podczas gdy mm
jest niepoprawna, ponieważ nie ma poprzedzającego określenia wielkości / ilości.
Wszystkie wartości muszą mieć swoją jednostkę. Dlatego musisz generalnie używać jednostki dla wartości w arkuszach kalkulacyjnych.
W niektórych przypadkach działa to nawet bez jednostki, na przykład jeśli masz np. w komórce B1 arkusza kalkulacyjnego tylko liczbę 1.5
i odnosisz się do niej jako do wysokości wyciągnięcia. Działa to tylko dlatego, że wysokość wyciągnięcia określa wstępnie jednostkę mm
, która jest używana, jeśli nie podano jednostki. Nie powiedzie się jednak, jeśli jako wysokości wyciągnięcia użyjesz np. Szkic1.Constraints.Width - Arkusz_kalkulacyjny.B1
, ponieważ Szkic1.Constraints.Width
ma określoną jednostkę, a Arkusz_kalkulacyjny.B1
nie.
Jednostki z wykładnikami mogą być wprowadzane bezpośrednio. Tak więc np. mm^3
zostanie rozpoznane jako mm³, a m^3
jako m³.
Jeśli masz zmienną, której nazwa jest jednostką, musisz umieścić ją pomiędzy << >>
, aby zapobiec rozpoznaniu jej jako jednostki. Na przykład, jeśli masz wymiar Szkic.Constraints.A
to zostałby on rozpoznany jako jednostka ampera. Dlatego musisz zapisać go w wyrażeniu jako Szkic.Constraints.<<A>>
.
Parser wyrażeń rozpoznaje następujące jednostki:
Jednostka | Opis |
---|---|
mmol | MilliMasa molowa |
mol | Mol |
Jednostka | Opis |
---|---|
° | Stopień; alternatywa dla jednostki deg |
deg | Stopień; alternatywa dla jednostki ° |
rad | Radian |
gon | Gradian |
M | Minuta kątowa, alternatywa dla jednostki ' |
′ | Minuta kątowa; alternatywa dla jednostki M |
S | Second of arc; NIE DZIAŁA; alternatywa dla jednostki ″ |
″ | Second of arc; to jest podwójny znak prim (U+2033); alternatywa dla jednostki S |
Jednostka | Opis |
---|---|
mA | Milliamper |
A | Amper |
kA | Kiloamper |
MA | Megaamper |
Pojemność elektryczna:
Jednostka | Opis |
---|---|
pF | Pikofarad, |
nF | Nanofarad, |
uF | Mikrofarad; alternatywa dla jednostki µF, |
µF | Mikrofarad; alternatywa dla jednostki uF, |
mF | Millifarad, |
F | Farad; 1 F = 1 s^4·A^2/m^2/kg, |
Ładunek elektryczny:
Jednostka | Opis |
---|---|
C | Kolumb; 1 C = 1 A·s |
Jednostka | Opis |
---|---|
uS | Microsiemens; alternatywa dla jednostki µS |
µS | Microsiemens; alternatywa dla jednostki uS |
mS | Millisiemens |
S | Siemens; 1 S = 1 s^3·A^2/kg/m^2 |
kS | KiloSiemens |
MS | MegaSiemens |
Indukcyjność elektryczna:
Jednostka | Opis | ||
---|---|---|---|
nH | Nanohenr, | ||
uH | Mikrohenr; alternatywa dla jednostki µH, | ||
µH | Mikrohenr; alternatywa dla jednostki uH, | ||
mH | Millihenr, | H | [v Henry]; 1 H = 1 kg·m^2/s^2/A^2, |
Potencjał elektryczny:
Jednostka | Opis |
---|---|
mV | Milliwolt |
V | Wolt |
kV | Kilowolt |
Rezystancja elektryczna:
Jednostka | Opis |
---|---|
Ohm | Om; 1 Ohm = 1 kg·m^2/s^3/A^2, |
kOhm | Kiloom, |
MOhm | Megaom, |
Jednostka | Opis |
---|---|
mJ | MilliDżul |
J | Dżul |
kJ | KiloDżul |
eV | Elektronowolt, 1 eV = 1.602176634e-19 J |
keV | KiloElektronowolt |
MeV | MegaElektronowolt |
kWh | Kilowatogodzina, 1 kWh = 3.6e6 J |
Ws | Watosekunda, alternatywa dla jednostki Dżul |
VAs | Woltoamperosekunda, alternatywa dla jednostki Dżul |
CV | Kulomb-wolt, alternatywa dla jednostki Dżul |
cal | Kaloria, 1 cal = 4.184 J |
kcal | KiloKaloria |
Jednostka | Opis |
---|---|
mN | Milliniuton |
N | Niuton |
kN | Kiloniuton |
MN | Meganiuton |
lbf | Funt-siła |
Jednostka | Opis |
---|---|
nm | Nanometr |
mu | Micrometr, alternatywa dla jednostki µm |
µm | Micrometr, alternatywa dla jednostki mu |
mm | Millimetr |
cm | Centimetr |
dm | Decimetr |
m | Metr |
km | Kilometr |
mil | Tysięczne części cala, alternatywa dla jednostki thou |
thou | Tysięczne części cala, alternatywa dla jednostki mil |
in | Cal, alternatywa dla jednostki " |
" | Cal, alternatywa dla jednostki in |
ft | Stopa, alternatywa dla jednostki ' |
' | Stopa, alternatywa dla jednostki ft |
yd | Jard |
mi | Mila |
Jednostka | Opis |
---|---|
cd | Kandela |
Strumień magnetyczny:
Jednostka | Opis |
---|---|
Wb | Weber; 1 Wb = 1 kg*m^2/s^2/A, |
Gęstość strumienia magnetycznego:
Jednostka | Opis |
---|---|
G | Gaus; 1 G = 1 e-4 T, |
T | Tesla; 1 T = 1 kg/s^2/A, |
Jednostka | Opis |
---|---|
ug | Microgram, alternatywa dla jednostki µg |
µg | Microgram, alternatywa dla jednostki ug |
mg | Milligram |
g | Gram |
kg | Kilogram |
t | Tona |
oz | Uncja |
lb | Funt, alternatywa dla jednostki lbm |
lbm | Funt, alternatywa dla jednostki lb |
st | Kamień |
cwt | Waga stu-kilowa (kwintał) |
Jednostka | Opis |
---|---|
W | Wat |
kW | KiloWat |
Jednostka | Opis |
---|---|
Pa | Paskal |
kPa | Kilopaskal |
MPa | Megapaskal |
GPa | Gigapaskal |
uTorr | Microtor, alternatywa dla jednostki µTorr |
µTorr | Microtor, alternatywa dla jednostki uTorr |
mTorr | Millitor |
Torr | Tor; 1 Torr = 133.32 Pa |
psi | Funt na cal kwadratowy; 1 psi = 6.895 kPa |
kpsi | KiloFunt na cal kwadratowy |
Jednostka | Opis |
---|---|
uK | Microkelwin, alternatywa dla jednostki µK |
µK | Microkelwin, alternatywa dla jednostki uK |
mK | Millikelwin |
K | Kelwin |
Jednostka | Opis |
---|---|
s | Second |
min | Minuta |
h | Godzina |
Hz (1/s) | Herc |
kHz | KiloHerc, |
MHz | MegaHerc |
GHz | GigaHerc |
THz | TeraHerc |
Jednostka | Opis |
---|---|
ml | MilliLitr |
l | Litr |
cft | Stopa sześcienna |
Jednostka | Opis |
---|---|
mph | Mila na godzinę |
sqft | Stopa kwadratowa |
Poniższe powszechnie używane jednostki nie są jeszcze obsługiwane, dla niektórych podano alternatywę:
Jednostka | Opis | Zamiennik |
---|---|---|
°C | Celsjusz | [°C] + 273.15 K |
°F | Fahrenheit; | ([°F] + 459.67) × 5/9 |
u | Jednostka masy atomowej, alternatywa dla jednostki Da | 1.66053906660e-27 kg |
Da | Dalton, alternatywa dla jednostki u | 1.66053906660e-27 kg |
sr | Steradian | nie bezpośrednio |
lm | Lumen | nie bezpośrednio |
lx | Luks | nie bezpośrednio |
px | Piksel | nie bezpośrednio |
Funkcja wyrażeń jest bardzo potężna, ale aby osiągnąć tę moc, ma pewne ograniczenia dotyczące niektórych znaków. Aby temu zaradzić, FreeCAD oferuje możliwość używania etykiet i odwoływania się do nich zamiast do nazw obiektów. W etykietach można używać prawie wszystkich znaków specjalnych.
W przypadkach, w których nie można użyć etykiety, takich jak nazwa wiązań szkicu, należy być świadomym, których znaków nie wolno używać.
Dla etykiet nie ma nieprawidłowych znaków, jednak niektóre znaki muszą być wyprowadzone:
Znak | Opis |
---|---|
' , \ , "
|
Wymaga wyprowadzenia poprzez dodanie znaku poprzedzającego \ .
|
Na przykład etykieta Sketch\002
musi być określona jako <<Sketch\\002>>
.
Nazwy obiektów takich jak wymiary, szkice itp. nie mogą posiadać znaków lub sekwencji znaków wymienionych poniżej, w przeciwnym razie nazwa jest niepoprawna:
Znak / Ciąg znaków | Opis |
---|---|
+, -, *, /, ^, _, <, >, (, ), {, }, [, ], ., ,, = | Znaki, które są operatorami matematycznymi lub częścią konstrukcji matematycznych |
A, kA, mA, MA, J, K, ' , ft , °, i wiele więcej! | Znaki i ich ciągi, które są jednostkami, (patrz akapit Jednostki) |
#, !, ?, §, $, %, &, :, ;, \, |, ~, ∆, ¿, i wiele więcej! | Znaki używane jako symbol listy lub wyzwalają specjalne operacje |
pi, e | Stałe matematyczne |
´, `, ' , " | Znaki używane do akcentowania |
spacja | Spacja określa koniec nazwy i dlatego nie może być użyta |
Na przykład, prawidłowa jest następująca nazwa: <<Sketch>>.Constraints.T2üßµ@
. Natomiast następujące nazwy są niepoprawne: <<Sketch>>.Constraints.test\result_2
(\r oznacza "powrót karetki") lub <<Sketch>>.Constraints.mol
(mol to jednostka).
Ponieważ krótsze nazwy (zwłaszcza jeśli mają tylko jeden lub dwa znaki) mogą łatwo doprowadzić do nieprawidłowych nazw, rozważ użycie dłuższych nazw i / lub ustalenie odpowiedniej konwencji nazewnictwa.
Zobacz stronę Definiuj alias.
Możliwe jest użycie danych z samego modelu w wyrażeniu. Aby odwołać się do właściwości użyj object_name.property
lub <<object_label>>.property
, etykiety muszą być zawarte w <<
i >>
. Jeśli chcesz używać etykiet, muszą one być unikalne.
Wszystkie następne przykłady odwołują się do obiektu poprzez jego nazwę, ale we wszystkich przypadkach można również użyć etykiety obiektu.
Jeśli właściwość jest złożeniem pól, dostęp do poszczególnych pól można uzyskać jako object_name.property.field
.
Aby odwołać się do obiektów listy, użyj właściwości <<Etykieta_obiektu>>.lista[index_listy]
lub Nazwa_obiektu.lista[index_listy]
. Jeśli chcesz na przykład odwołać się do wiązania w szkicu, użyj właściwości <<Nazwa_szkicu>>.Wiązanie[16]
. Jeśli znajdujesz się w tym samym szkicu, możesz pominąć jego nazwę i po prostu użyć właściwości Wiązanie[16]
.
Uwaga: Numeracja indeksów zaczyna się od 0, dlatego Wiązanie17 ma indeks Wiązanie[16]
.
Aby odwołać się do samego obiektu, należy użyć pseudo-właściwości _self
: object_name._self
.
Poniższa tabela przedstawia kilka przykładów:
dane CAD | Odwołanie do wyrażenia | Wynik |
---|---|---|
Parametr długości sześcianu środowiska pracy Część | Cube.Length
|
Długość w mm |
Objętość sześcianu | Cube.Shape.Volume
|
Objętość w mm³ bez jednostek |
Typ kształtu sześcianu | Cube.Shape.ShapeType
|
String: Bryła |
Etykieta sześcianu | Cube.Label
|
String: Etykieta |
Współrzędna x środka masy sześcianu | Cube.Shape.CenterOfMass.x
|
Współrzędna x w mm, bez jednostek |
Składowa X osi obrotu umiejscowienia Sześcianu | Box.Placement.Rotation.Axis.x
| |
Kąt obrotu dla umiejscowienia Sześcianu | Box.Placement.Rotation.Angle
|
Kąt obrotu w jednostkach (deg) |
Pełny obiekt Sześcianu | Box._self
|
Obiekt typu <Part::PartFeature>. |
Wartość wiązania w szkicu | Constraints.Width
|
Wartość numeryczna nazwanego wiązania Width w szkicu, jeśli wyrażenie jest używane w samym szkicu.
|
Wartość wiązania w szkicu | MySketch.Constraints.Width
|
Wartość numeryczna nazwanego wiązania Width w szkicu, jeśli wyrażenie jest używane poza szkicem.
|
Wartość aliasu arkusza kalkulacyjnego | Spreadsheet.Depth
|
Wartość aliasu Depth w arkuszu kalkulacyjnym Spreadsheet
|
Wartość lokalnej właściwości | Length
|
Wartość właściwości DANELength np. w obiekcie Pad, jeżeli wyrażenie jest użyte np. w DANELength2 w tym samym obiekcie. |
FreeCAD sprawdza zależności na podstawie relacji między obiektami dokumentu, a nie właściwościami. Oznacza to, że nie można dostarczyć danych do obiektu i zapytać tego samego obiektu o wyniki. Na przykład, nawet jeśli nie ma cyklicznych zależności, gdy brane są pod uwagę same właściwości, nie można mieć obiektu, który pobiera swoje wymiary z arkusza kalkulacyjnego, a następnie wyświetla objętość tego obiektu w tym samym arkuszu kalkulacyjnym. Musisz użyć dwóch arkuszy kalkulacyjnych, jednego do obsługi modelu, a drugiego do raportowania.
Jako obejście można wyświetlić zakres komórek z drugiego arkusza kalkulacyjnego w pierwszym (lub odwrotnie), tworząc komórki powiązane opcją Ukryj zależność powiązań.
Innym sposobem na obejście zależności cyklicznych jest ukrycie odniesienia za pomocą funkcji href
lub hiddenref
dla poszczególnych wyrażeń, na przykład: href(Box.Length)
.
Należy pamiętać, że oba wspomniane obejścia powinny być stosowane z ostrożnością i że nie działają, jeśli raportowane właściwości zależą od wymiarów, które są sterowane z tego samego arkusza kalkulacyjnego.
W tej chwili w programie FreeCAD nie ma koncepcji zmiennych globalnych. Zamiast tego zmienne mogą być definiowane jako komórki w arkuszu kalkulacyjnym za pomocą środowiska roboczego Arkusz kalkulacyjny, a następnie można im nadać nazwę za pomocą właściwości aliasu dla komórki (kliknij prawym przyciskiem myszy na komórkę). Następnie można się do nich odwoływać z dowolnego wyrażenia, tak jak do innych właściwości obiektu.
Możliwe jest (z ograniczeniami) zdefiniowanie właściwości obiektu w bieżącym dokumencie (plik ".FCstd") za pomocą Wyrażenia odwołującego się do właściwości obiektu znajdującego się w innym dokumencie (plik ".FCstd"). Na przykład, komórka w arkuszu kalkulacyjnym lub właściwość DANEDługość sześcianu środowiska Część itp. w jednym dokumencie mogą być zdefiniowane przez Wyrażenie, które odwołuje się do wartości X Umiejscowienia lub innej właściwości obiektu znajdującego się w innym dokumencie.
Nazwa dokumentu jest używana do odwoływania się do jego zawartości z innych dokumentów. Przy pierwszym zapisie dokumentu wybieramy nazwę pliku, która zazwyczaj różni się od początkowej domyślnej nazwy "Nienazwany1". Aby uniknąć utraty linków w przypadku zmiany nazwy dokumentu głównego przy zapisie, zaleca się najpierw utworzenie dokumentu głównego, utworzenie w nim arkusza kalkulacyjnego i zapisanie go. Następnie można nadal wprowadzać zmiany w pliku i jego arkuszu kalkulacyjnym, ale nie należy modyfikować jego nazwy.
Po utworzeniu i zapisaniu (nazwaniu) dokumentu głównego z arkuszem kalkulacyjnym można bezpiecznie tworzyć dokumenty zależne. Na przykład, zakładając, że nazwiesz dokument główny master
, arkusz kalkulacyjny modelConstants
i nadasz komórce alias nazwy Length
, możesz następnie uzyskać dostęp do wartości jako:
master#modelConstants.Length
Należy pamiętać, że dokument źródłowy musi być wczytany, aby wartości z dokumentu źródłowego były dostępne dla dokumentu powiązanego.
Oczywiście, to do Ciebie zależy, czy wczytasz odpowiednie dokumenty później, gdy będziesz chciał coś zmienić.
import FreeCAD as App
doc = App.ActiveDocument
box = doc.addObject("Part::Box", "Box")
cyl = doc.addObject("Part::Cylinder", "Cylinder")
cyl_name = cyl.Name
box.setExpression("Height", f"{cyl_name}.Height / 2")
box.setExpression("Length", f"{cyl_name}.Radius * 2")
box.setExpression("Width", "Length")
doc.recompute()
# Expressions are stored in the ExpressionEngine property:
for prop, exp in box.ExpressionEngine:
val = getattr(box, prop)
print(f"Property: '{prop}' -- Expression: '{exp}' -- Current value: {val}")